Thực đơn
Trigger_trong_cơ_sở_dữ_liệu Trigger trong hệ quản trị cơ sở dữ liệu (DBMS)Đa số các DBMS phổ biến hiện nay đều hỗ trợ Database Trigger, với cú pháp gần như tương tự nhau. Giới hạn của nội dung bài viết này sẽ giới thiệu về Trigger trong hệ quản trị cơ sở dữ liệu MariaDB.MariaDB định nghĩa trigger là một tập hợp các câu lệnh chạy (hoặc kích hoạt) khi một sự kiện được đặt trước xảy ra.
Sự kiện có thể là INSERT, UPDATE hoặc DELETE. Trigger có thể được thực hiện trước hoặc sau sự kiện. Cho đến phiên bản MariaDB 10.2.3, một bảng có thể chỉ có một bộ kích hoạt được xác định cho mỗi sự kết hợp sự kiện/thời gian (ví dụ: bảng chỉ có thể có một nút kích hoạt trước INSERT).
Lệnh khai báo LOAD DATA INFILE và LOAD XML yêu cầu một trigger INSERT cho mỗi hàng đang được chèn vào.
Câu lệnh REPLACE được thực hiện với các quy trình làm việc sau:
TRUNCATE
TABLE
không kích hoạt bất kỳ trigger nào.Với các Engine lưu trữ không giao dịch, nếu câu lệnh BEFORE tạo ra lỗi, tuyên bố sẽ không được thực hiện. Các tuyên bố ảnh hưởng đến nhiều hàng sẽ không thành công trước khi chèn dòng hiện tại.Với các Engine giao dịch, các trình kích hoạt (trigger) được thực hiện trong cùng một thao tác như câu lệnh gọi chúng.
CREATE [OR REPLACE] [DEFINER = {user | CURRENT_USER | role | CURRENT_ROLE}] TRIGGER [IF NOT EXISTS] ten_triger thoi_gian_kich_hoat su_kien ON ten_bang FOR EACH ROW [{FOLLOWS | PRECEDES} ten_khac_trigger] cau_lenh_trigger
Câu lệnh này tạo ra một Trigger mới. Trigger là một đối tượng cơ sở dữ liệu được đặt tên có liên quan đến một bảng và được kích hoạt khi một sự kiện cụ thể xảy ra cho bảng. Kích hoạt sẽ trở thành kết hợp với bảng có tên ten_bang
, nó phải tham chiếu đến một bảng vĩnh viễn. Bạn không thể liên kết một Trigger với một bảng TEMPORARY hoặc một View.
OR REPLACE
- nếu một Trigger đã tồn tại, thay vì trả lại lỗi. Trigger cũ sẽ được tại thế bằng Trigger mới.DEFINER
- mệnh đề DEFINER
xác định bối cảnh an toàn được sử dụng khi kiểm tra các đặc quyền truy cập tại thời điểm kích hoạt Trigger.IF NOT EXISTS
- chỉ tạo Trigger nếu trước đó nó không tồn tại.thoi_gian_kich_hoat
- nó có thể trước hoặc sau để chỉ ra rằng trigger được kích hoạt khi nào khi chúng ta thực hiện sửa đổi hàng.su_kien
- có thể là INSERT
, UPDATE
và DELETE
.FOLLOWS | PRECEDES
ten_trigger-khac
- thêm trigger mới trước/sau (PRECEDES/FOLLOWS) trigger khác.CREATE TABLE animals (id mediumint(9) NOT NULL AUTO_INCREMENT, name char(30) NOT NULL, PRIMARY KEY (`id`)); /* Tạo bảng animals */CREATE TABLE animal_count (animals int); /* Tạo bảng animal_count đếm số lượng của bảng animals */INSERT INTO animal_count (animals) VALUES(0); /* INSERT dữ liệu 0 vào bảng animal_count */
CREATE TRIGGER increment_animal AFTER INSERT ON animals FOR EACH ROW UPDATE animal_count SET animal_count.animals = animal_count.animals+1;
increment_animal
AFTER
INSERT
cho bảng animals với tập hợp lệnh là lệnh UPDATE
SELECT * FROM animal_count;/* Ta được kết quả */+---------+| animals |+---------+| 0 |+---------+/* insert dữ liệu cho bảng animals */INSERT INTO animals (name) VALUES('Dog');INSERT INTO animals (name) VALUES('Cat');/* Xem bảng animal_count */SELECT * FROM animal_count;/* Ta được kết quả */+---------+| animals |+---------+| 2 |+---------+
Ta sử dụng lệnh sau để xóa trigger:
DROP TRIGGER [IF EXISTS] ten_trigger;
DROP TRIGGER
- tuyên bố xóa Trigger.IF EXISTS
- đưa ra một cảnh báo lỗi khi trigger không được tạo trước đó.ten_trigger
- tên của trigger trước đó.DROP TRIGGER [IF EXISTS] increment_animal;
CTUET_DBMS_Group3
Thực đơn
Trigger_trong_cơ_sở_dữ_liệu Trigger trong hệ quản trị cơ sở dữ liệu (DBMS)Liên quan
Trigger (xưởng phim) Trigger Schmitt Triggiano Triglyceride Trigun Trigana Air Service Triglav Tri giác Trigonopleura Trigoniulus corallinusTài liệu tham khảo
WikiPedia: Trigger_trong_cơ_sở_dữ_liệu https://mariadb.com/kb/en/library/load-data-infile...